const axios = require('axios');

// 测试配置
const BASE_URL = 'http://localhost:3000/api';

/**
 * 测试获取订单地址详情接口
 * @param {number} orderId - 订单ID
 * @param {string} token - 认证token
 */
const testGetOrderAddressDetail = async (orderId, token = null) => {
  try {
    console.log(`\n测试获取订单ID为 ${orderId} 的地址详情${token ? '（带认证）' : '（不带认证）'}...`);
    
    const config = {
      params: {
        order_id: orderId
      }
    };
    
    // 如果提供了token，添加认证头
    if (token) {
      config.headers = {
        'Authorization': `Bearer ${token}`
      };
    }
    
    const response = await axios.get(`${BASE_URL}/order_address`, config);
    
    console.log('请求成功，状态码:', response.status);
    console.log('响应数据:', response.data);
    
  } catch (error) {
    console.error('请求失败:');
    if (error.response) {
      console.error('状态码:', error.response.status);
      console.error('错误信息:', error.response.data.message || '未知错误');
    } else if (error.request) {
      console.error('无响应:', error.request);
    } else {
      console.error('请求配置错误:', error.message);
    }
  }
};

/**
 * 测试认证相关场景
 */
const testAuthScenarios = async () => {
  // 注意：这里需要替换为数据库中实际存在的订单ID
  const existingOrderId = 1; // 请根据实际数据修改
  
  // 测试1: 不带token访问受保护接口
  console.log('\n测试1: 不带token访问受保护接口...');
  await testGetOrderAddressDetail(existingOrderId, null);
  
  // 测试2: 使用无效token访问
  console.log('\n测试2: 使用无效token访问...');
  await testGetOrderAddressDetail(existingOrderId, 'invalid_token');
  
  // 测试3: 使用正确格式但未授权的token
  console.log('\n测试3: 使用正确格式但未授权的token...');
  await testGetOrderAddressDetail(existingOrderId, 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTUxNjIzOTAyMn0.placeholder_signature');
};

/**
 * 测试业务逻辑相关场景
 */
const testBusinessScenarios = async (authToken = null) => {
  // 注意：这里需要替换为数据库中实际存在的订单ID
  const existingOrderId = 1; // 请根据实际数据修改
  
  // 测试1: 获取存在的订单地址详情
  console.log('\n测试1: 获取存在的订单地址详情...');
  await testGetOrderAddressDetail(existingOrderId, authToken);
  
  // 测试2: 获取不存在的订单地址
  console.log('\n测试2: 获取不存在的订单地址...');
  await testGetOrderAddressDetail(999999, authToken); // 不存在的订单ID
  
  // 测试3: 缺少订单ID参数
  try {
    console.log('\n测试3: 缺少订单ID参数...');
    
    const config = {};
    if (authToken) {
      config.headers = {
        'Authorization': `Bearer ${authToken}`
      };
    }
    
    const response = await axios.get(`${BASE_URL}/order_address`, config);
    
    console.log('请求成功，状态码:', response.status);
    console.log('响应数据:', response.data);
    
  } catch (error) {
    console.error('请求失败:');
    if (error.response) {
      console.error('状态码:', error.response.status);
      console.error('错误信息:', error.response.data.message || '未知错误');
    } else if (error.request) {
      console.error('无响应:', error.request);
    } else {
      console.error('请求配置错误:', error.message);
    }
  }
};

/**
 * 运行所有测试
 */
const runAllTests = async () => {
  console.log('开始测试订单地址详情接口...\n');
  
  // 第一部分：认证相关测试
  console.log('=== 第一部分：认证相关测试 ===');
  await testAuthScenarios();
  
  // 注意：如果你有有效的管理员token，可以在这里添加业务逻辑测试
  console.log('\n\n=== 提示 ===');
  console.log('如果要测试业务逻辑场景，请先获取有效的管理员token，');
  console.log('然后将token作为参数传递给testBusinessScenarios函数。');
  
  // 示例：如果有有效的token
  // const validToken = 'your_valid_admin_token_here';
  // console.log('\n\n=== 第二部分：业务逻辑测试 ===');
  // await testBusinessScenarios(validToken);
  
  console.log('\n所有测试完成！');
};

// 运行测试
runAllTests();